home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / DiceSource / src / dmake / wildcmp.a < prev    next >
Text File  |  1992-10-27  |  2KB  |  108 lines

  1.  
  2.         section text,code
  3.  
  4.         ;WILDCMP(wild:D0, name:D1)
  5.         ;
  6.         ;   Handles * and ?
  7.         ;
  8.         ;result:  D0, 0 = no match, 1 = match
  9.         ;
  10.         ;auto:
  11.         ;   D2    bi
  12.         ;   A2    wildcard string
  13.         ;   A3    name     string
  14.         ;   A4    back-array (of size MAXB * 2 * 4)
  15.  
  16. MAXB        EQU    8
  17. MAXB28        EQU    128    /*  MAXB*2*8    */
  18.  
  19.         xdef    _WildCmp
  20.  
  21. _WildCmp:    movem.l 4(sp),D0/D1
  22.         movem.l D2/A2-A4,-(sp)
  23.         move.l    D0,A2
  24.         move.l    D1,A3
  25.         sub.l    #MAXB28,sp
  26.         move.l    sp,A4
  27.  
  28.         moveq.l #0,D2
  29.  
  30. xwcloop     moveq.l #1,D0
  31.         move.b    (A2),D1
  32.         bne    xw1
  33.         tst.b    (A3)
  34.         beq    xwcdone
  35.  
  36. xw1        cmp.b    #$2A,D1     ; '*'
  37.         bne    xw10
  38.         cmp.w    #MAXB,D2
  39.         bne    xw2
  40.         moveq.l #-1,D0        ; error
  41.         bra    xwcdone
  42. xw2        move.w    D2,D0        ; back[bi][0] = w  i.e. back+bi*8
  43.         asl.w    #3,D0        ; back[bi][1] = n
  44.         move.l    A2,0(A4,D0.w)
  45.         move.l    A3,4(A4,D0.w)
  46.         addq.w    #1,D2
  47.         addq.l    #1,A2
  48.         bra    xwcloop
  49.  
  50. xwgoback    subq.w    #1,D2
  51.         bmi    xw5
  52.         move.w    D2,D0
  53.         asl.w    #3,D0
  54.         move.l    4(A4,D0.w),A0
  55.         tst.b    (A0)
  56.         beq    xwgoback
  57. xw5        tst.w    D2
  58.         bmi    xwcret0
  59.         move.w    D2,D0
  60.         asl.w    #3,D0
  61.         move.l    0(A4,D0.w),A2
  62.         addq.l    #1,A2
  63.         add.l    #1,4(A4,D0.w)
  64.         move.l    4(A4,D0.w),A3
  65.         addq.l    #1,D2
  66.         bra    xwcloop
  67.  
  68. xw10        cmp.b    #$3F,D1     ; '?'
  69.         bne    xw20
  70.         tst.b    (A3)
  71.         bne    xwcbreak
  72.         tst.w    D2
  73.         bne    xwgoback
  74.         bra    xwcret0
  75.  
  76. xw20        move.b    (A3),D0
  77.         cmp.b    #$51,D0
  78.         bcs    xw21
  79.         cmp.b    #$5A,D0
  80.         bhi    xw21
  81.         or.b    #$20,D0
  82. xw21        move.b    (A2),D1
  83.         cmp.b    #$41,D1
  84.         bcs    xw22
  85.         cmp.b    #$5A,D1
  86.         bhi    xw22
  87.         or.b    #$20,D1
  88. xw22        cmp.b    D0,D1
  89.         beq    xwcbreak
  90.         tst.w    D2
  91.         bne    xwgoback
  92.         bra    xwcret0
  93.  
  94. xwcbreak    tst.b    (A2)+
  95.         bne    xwcb1
  96.         subq.l    #1,A2
  97. xwcb1        tst.b    (A3)+
  98.         bne    xwcb2
  99.         subq.l    #1,A3
  100. xwcb2        bra    xwcloop
  101.  
  102. xwcret0     moveq.l #0,D0
  103. xwcdone     add.l    #MAXB28,sp
  104.         movem.l (sp)+,D2/A2-A4
  105.         rts
  106.  
  107.         END
  108.